package com.zy.explore.common.application.service;

import com.zy.explore.common.domain.mongo.dao.MongoExampleDao;
import com.zy.explore.common.domain.mongo.entity.MongoExampleEntity;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * Mongo示例Service
 *
 * @author ChinaYin  主页:https://gitee.com/zy-explorej2ee 邮箱:zyexplorej2ee@sina.com
 * @date 2021年05月19日 20:57
 */
@Service
public class MongoExampleService {

    @Resource
    private MongoExampleDao mongoExampleDao;

    /**
     * 新增数据
     *
     * @param entity 参数对象
     * @return 插入的entity对象
     */
    public MongoExampleEntity insert(MongoExampleEntity entity) {
        return mongoExampleDao.insert(entity);
    }

    /**
     * 删除对象
     *
     * @param id 主键
     * @return 1:删除成功 其他:删除失败
     */
    public Integer delete(String id) {
        mongoExampleDao.remove(id);
        return 1;
    }

    /**
     * 更新对象
     *
     * @param entity 待更新的实体对象
     * @return 返回1成功，0失败
     */
    public int update(MongoExampleEntity entity) {
        return mongoExampleDao.updateById(entity);
    }

    /**
     * 根据ID查询数据
     *
     * @param id 主键
     * @return 成功返回对应ID的VO对象，失败返回null
     */
    public MongoExampleEntity findById(String id) {
        return mongoExampleDao.findById(id);
    }

    /**
     * 根据条件查询数据集合
     *
     * @param query 查询条件对象
     * @return 满足条件的数据集合
     */
    public List<MongoExampleEntity> getList(Query query) {
        return mongoExampleDao.findList(query);
    }

    /**
     * 根据条件查询数量
     *
     * @param query 查询条件
     * @return 返回总数量
     */
    public long getTotalCount(Query query) {
        return mongoExampleDao.getCount(query);
    }

    /**
     * 根据条件查询分页集合
     *
     * @param query 查询条件
     * @param pageNum 查询页码
     * @param pageSize 每页条数
     * @return 返回分页集合
     */
    public List<MongoExampleEntity> getPageList(Query query, int pageNum, int pageSize) {
        query.skip((long) (pageNum - 1) * pageSize);
        query.limit(pageSize);
        return mongoExampleDao.findList(query);
    }
}
